package com.wzb.mybatisplus.bitaction.electrumaction.two;

import org.bitcoinj.core.Base58;

public class SpecialFormatConverter {

    /**
     * 处理可能的34字符格式（如Base58编码或其他格式）
     */
    public static String convertToUncompressed(String input) {
        if (input == null || input.length() != 34) {
            throw new IllegalArgumentException("输入必须是34个字符");
        }

        // 情况1: 可能是Base58编码的压缩公钥
        if (isLikelyBase58(input)) {
            return convertFromBase58(input);
        }

        // 情况2: 可能是其他编码格式
        // 这里需要根据具体的34字符格式来实现

        throw new IllegalArgumentException("不支持的34字符格式");
    }

    /**
     * 检测是否为Base58编码
     */
    private static boolean isLikelyBase58(String input) {
        return input.matches("^[1-9A-HJ-NP-Za-km-z]{34}$");
    }

    /**
     * 从Base58解码
     */
    private static String convertFromBase58(String base58Input) {
        try {
            // 使用BitcoinJ或其他库进行Base58解码
            // 这里需要相应的依赖库
            byte[] decoded = Base58.decode(base58Input);

            // 假设解码后是33字节的压缩公钥
            if (decoded.length == 33) {
                String compressedHex = byteArrayToHexString(decoded);
                return CompressedToUncompressedPublicKey.compressedToUncompressed(compressedHex);
            }

            throw new IllegalArgumentException("Base58解码后长度不符合预期");

        } catch (Exception e) {
            throw new RuntimeException("Base58解码失败", e);
        }
    }

    // 工具方法
    public static String byteArrayToHexString(byte[] bytes) {
        StringBuilder sb = new StringBuilder();
        for (byte b : bytes) {
            sb.append(String.format("%02x", b));
        }
        return sb.toString();
    }
}